/**
 * 
 */
package cl.duocap.refaxion.view.bean;


import java.io.Serializable;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import cl.duocap.refaxion.dto.MarcaDTO;
import cl.duocap.refaxion.dto.ModeloDTO;
import cl.duocap.refaxion.dto.UsuarioDTO;
import cl.duocap.refaxion.dto.VehiculoDTO;
import cl.duocap.refaxion.servicios.UsuarioService;
import cl.duocap.refaxion.servicios.VehiculoService;


/**
 * @author rentonx
 *
 */
@ManagedBean(name = "formVehiculoBean")
@SessionScoped
public class FormVehiculoBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private VehiculoDTO vehiculoNuevo;
	private List<MarcaDTO> listaMarcasObtenidas;
	private List<ModeloDTO> listaModelosObtenidos;
	private List<Integer> listaAnnos;
	private MarcaDTO marca;
	private ModeloDTO modelo;
	private Map<String, Integer> listadoDeMarcas;
	private Map<String, Integer> listadoDeModelos;
	private List<UsuarioDTO> listaClientesObtenidos;
	private UsuarioDTO clienteSeleccionadoVehiculo;
	private UsuarioDTO clienteBuscado;
	private String rutBuscado;
	private String nombreBuscado;
	private boolean desabilitado = true; 
	
	private int idMarca;
	private  String marcaDescripcion;

	
	/**
	 * 
	 */
	@PostConstruct
	public void iniciar(){
		
		vehiculoNuevo = new VehiculoDTO();
		if (FacesContext.getCurrentInstance().isPostback()) {
			return;
		}
		
		listaAnnos = new ArrayList<Integer>();
		for (Integer i = 2015; i > 1950; i--) {
			listaAnnos.add(i);
		}

		VehiculoService vehiculo = new VehiculoService();
		setListaMarcasObtenidas(vehiculo.listarMarcasVehiculos());
		
		//Codigo que para enviar la lista de tipo de usuarios como par de datos 
		listadoDeMarcas = new LinkedHashMap<String, Integer>();
		for (MarcaDTO t: listaMarcasObtenidas) {
			listadoDeMarcas.put(t.getMarcaDescripcion(), t.getIdMarca());
			
		}
		
		//metodo para inicializar el formulario vacio y bloqueado
		inicializar();
		
		

	}
	
	public void inicializar(){
		setDesabilitado(true);
		clienteSeleccionadoVehiculo = null;
	}
	
	public String registrarVehiculoNuevo(){
		
		//UsuarioService usuario = new UsuarioService();

		SimpleDateFormat dateformatJava = new SimpleDateFormat("dd-MM-yyyy");
		vehiculoNuevo.setFechaIngreso(dateformatJava.format(vehiculoNuevo.getFechaIngresoTrans()));
		VehiculoService vehiculo = new VehiculoService();
		
		if(vehiculo.registrarVehiculoNuevo(vehiculoNuevo,clienteSeleccionadoVehiculo)){
			return "mainVehiculo.xhtml?faces-redirect=true";
		}else{
			return "formVehiculo.xhtml?faces-redirect=true";
		}
	}
	
	public void listarMarcas(){
		
		VehiculoService vehiculo = new VehiculoService();
		setListaMarcasObtenidas(vehiculo.listarMarcasVehiculos());

	}
	
	public void seleccionarClienteBusqueda(int clienteSeleccionado){
		
		UsuarioService cliente = new UsuarioService();
		setClienteSeleccionadoVehiculo(cliente.cargarUsuarioEditar(clienteSeleccionado));
		setDesabilitado(false);
		//String url = "/mantenedor/vehiculo/formVehiculo?faces-redirect=true&rut=" + clienteSeleccionadoVehiculo.getRut();			
		//return url;

		
	}
	
	public void listarClientes(){
		
		UsuarioService cliente = new UsuarioService();
		setListaClientesObtenidos(cliente.obtenerTodosUsuarios());
	}


	public void listaModelos(){
		try {
			
			VehiculoService vehiculo = new VehiculoService();
			int idmod =vehiculoNuevo.getIdMarca();
			listaModelosObtenidos = vehiculo.listarModelosMarcaSeleccionada(idmod);
			
			
			//Codigo que para enviar la lista de tipo de usuarios como par de datos 
			listadoDeModelos = new LinkedHashMap<String, Integer>();
			for (ModeloDTO m: listaModelosObtenidos) {
				listadoDeModelos.put(m.getModeloDescripcion(),m.getIdModelo());

			}		

			} catch (Exception e) {
				 throw new RuntimeException("listar modelos en combo.",e);
			}
		
	}
	
	public void obtenerClientesPorFiltros(){
		
		UsuarioService cliente = new UsuarioService();
		setListaClientesObtenidos(cliente.obtenerClientesBuscados(getRutBuscado(),getNombreBuscado()));

	}
	
	public void buscarListener() { 
		if(listaClientesObtenidos.isEmpty()){
			FacesContext context = FacesContext.getCurrentInstance();  		        
	        context.addMessage(null, new FacesMessage("Informacion", "Cliente no existe en los Registros, Debe agregar Cliente Nuevo."));
		}
	} 

	
	public void limpiarBusquedaCliente(){
		
	}

	public FormVehiculoBean() {
		
	}
	

	public FormVehiculoBean(VehiculoDTO vehiculoNuevo,
			List<MarcaDTO> listaMarcasObtenidas,
			List<ModeloDTO> listaModelosObtenidos,
			Map<String, Integer> listadoDeModelos,
			Map<String, Integer> listadoDeMarcas) {

		this.vehiculoNuevo = vehiculoNuevo;
		this.listaMarcasObtenidas = listaMarcasObtenidas;
		this.listaModelosObtenidos = listaModelosObtenidos;
		this.listadoDeModelos = listadoDeModelos;
		this.listadoDeMarcas = listadoDeMarcas;
	}

	public VehiculoDTO getVehiculoNuevo() {
		return vehiculoNuevo;
	}

	public void setVehiculoNuevo(VehiculoDTO vehiculoNuevo) {
		this.vehiculoNuevo = vehiculoNuevo;
	}

	
	public List<MarcaDTO> getListaMarcasObtenidas() {
		return listaMarcasObtenidas;
	}

	public void setListaMarcasObtenidas(List<MarcaDTO> listaMarcasObtenidas) {
		this.listaMarcasObtenidas = listaMarcasObtenidas;
	}


	public List<ModeloDTO> getListaModelosObtenidos() {
		return listaModelosObtenidos;
	}

	public void setListaModelosObtenidos(List<ModeloDTO> listaModelosObtenidos) {
		this.listaModelosObtenidos = listaModelosObtenidos;
	}


	public Map<String, Integer> getListadoDeMarcas() {
		return listadoDeMarcas;
	}

	public void setListadoDeMarcas(Map<String, Integer> listadoDeMarcas) {
		this.listadoDeMarcas = listadoDeMarcas;
	}

	public Map<String, Integer> getListadoDeModelos() {
		return listadoDeModelos;
	}

	public void setListadoDeModelos(Map<String, Integer> listadoDeModelos) {
		this.listadoDeModelos = listadoDeModelos;
	}

	public MarcaDTO getMarca() {
		return marca;
	}

	public void setMarca(MarcaDTO marca) {
		this.marca = marca;
	}

	public ModeloDTO getModelo() {
		return modelo;
	}

	public void setModelo(ModeloDTO modelo) {
		this.modelo = modelo;
	}

	public String getMarcaDescripcion() {
		return marcaDescripcion;
	}

	public void setMarcaDescripcion(String marcaDescripcion) {
		this.marcaDescripcion = marcaDescripcion;
	}

	public int getIdMarca() {
		return idMarca;
	}

	public void setIdMarca(int idMarca) {
		this.idMarca = idMarca;
	}


	public List<Integer> getListaAnnos() {
		return listaAnnos;
	}


	public void setListaAnnos(List<Integer> listaAnnos) {
		this.listaAnnos = listaAnnos;
	}

	public List<UsuarioDTO> getListaClientesObtenidos() {
		return listaClientesObtenidos;
	}

	public void setListaClientesObtenidos(List<UsuarioDTO> listaClientesObtenidos) {
		this.listaClientesObtenidos = listaClientesObtenidos;
	}

	public UsuarioDTO getClienteSeleccionadoVehiculo() {
		return clienteSeleccionadoVehiculo;
	}

	public void setClienteSeleccionadoVehiculo(
			UsuarioDTO clienteSeleccionadoVehiculo) {
		this.clienteSeleccionadoVehiculo = clienteSeleccionadoVehiculo;
	}

	public UsuarioDTO getClienteBuscado() {
		return clienteBuscado;
	}

	public void setClienteBuscado(UsuarioDTO clienteBuscado) {
		this.clienteBuscado = clienteBuscado;
	}

	public String getRutBuscado() {
		return rutBuscado;
	}

	public void setRutBuscado(String rutBuscado) {
		this.rutBuscado = rutBuscado;
	}

	public String getNombreBuscado() {
		return nombreBuscado;
	}

	public void setNombreBuscado(String nombreBuscado) {
		this.nombreBuscado = nombreBuscado;
	}

	public boolean isDesabilitado() {
		return desabilitado;
	}

	public void setDesabilitado(boolean desabilitado) {
		this.desabilitado = desabilitado;
	}

	


	
	
}
